package tech.edwardvan.rabbitmqdemo.pattern.simple;

import cn.hutool.core.map.MapUtil;
import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import lombok.extern.slf4j.Slf4j;
import tech.edwardvan.rabbitmqdemo.pattern.CommonUtil;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Map;
import java.util.concurrent.TimeoutException;

/**
 * 简单模式-生产者
 *
 * @author EdwardVan
 */
@Slf4j
public class Producer {


    public static void main(String[] args) throws IOException, TimeoutException {
        //获取一个连接
        Connection connection = CommonUtil.getConnection();

        //从连接中获取一个通道
        Channel channel = connection.createChannel();

        //创建队列声明,如果队列已经存在,则不会重复创建
        channel.queueDeclare(CommonUtil.QUEUE_SIMPLE, false, false, true, null);

        //需要发送的消息
        String msg = "hello simple!";
        //消息的属性
        AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder()
                .deliveryMode(2)//持久化投递
                .contentEncoding(StandardCharsets.UTF_8.name())//编码
                .expiration("10000")//过期时间
                .headers(MapUtil.of("hello", "simple"))
                .build();
        /*
            1. 交换机名称 ""表示默认的交换机
            2. 消息路由键 对于默认交换机,路由键就是队列名
            3. 消息的其他参数属性
            4. 消息主体数据
         */
        for (int i = 0; i < 100; i++) {
            channel.basicPublish("", CommonUtil.QUEUE_SIMPLE, properties, (msg + i).getBytes());
        }

        log.info("生产者发送消息完成");

        //关闭
        channel.close();
        connection.close();
    }
}
